---
output:
  word_document: default
  html_document: default
---

```{r}
library(openxlsx)
library(ggplot2)
library(randomForest)
library(ggcorrplot)
library(GGally)
library(dplyr)

data <- read.xlsx(xlsxFile = "var_49.xlsx")
```

```{r}
# 
x <- names(data)
del_comma <- function(x){
  x <- gsub(',','',x)
}
y <- sapply(x, del_comma)
colnames(data) <- y
colnames(data)[3] <-"Среднегодовой.доход.тыс"
colnames(data)[7] <-"Доля.от.дохода.семьи.которая.тратится.на.продовольствие"
colnames(data)[9] <- "Издержки.сообщества.на.окружающую.среду.млн."
colnames(data)[10] <- "Охват.беспроводной.связи.в.сообществе"

indHappy <- factor(data$"Ощущаемое.счастье", levels = c("Hopeless","Depressed","Suffering",
                                                        "Strugglng","Coping","Just ok", 
                                                        "Doing well", "Blooming", "Thriving",
                                                        "Prospering"),
                   labels=c(1,2,3,4,5,6,7,8,9,10)) 


Data <- cbind(data,"Уровень.счастья" = indHappy)
```

```{r}
data$Ощущаемое.счастье <- as.factor(Data$Ощущаемое.счастье)
no_data <- subset(Data, Data$Ощущаемое.счастье == 'Неизвестно')
learn_data <- subset(Data, Data$Ощущаемое.счастье != 'Неизвестно')
```

```{r}
# разбиваем выборку на обучаующую и тестовую
set.seed(111)
index = sample(1:nrow(learn_data), nrow(learn_data)*0.8)
train_data <- learn_data[index, ]
test_data <- learn_data[-index, ]
```

```{r}
the_cantril_scale <- c('Hopeless', 'Depressed', 'Suffering', 'Strugglng', 'Coping', 'Just ok', 'Doing well', 'Blooming', 'Thriving', 'Prospering')
rang <- c(1:10)
data_corr <- train_data
data_corr$Ощущаемое.счастье <- as.character(data_corr$Ощущаемое.счастье)
data_corr$Ощущаемое.счастье_Шкала <- data_corr$Ощущаемое.счастье
for (i in 1:10) {
  data_corr[data_corr$Ощущаемое.счастье == the_cantril_scale[i], 27] <- as.numeric(rang[i])
}
data_corr <- data_corr[order(data_corr$Ощущаемое.счастье_Шкала),]
```

## Выявление зависимостей 
### Зависимости между признаками состояния и интегральной оценкой счастья
```{r}
# нужно сделать колонкам нормальные названия
new_name <- c('V1', 'V2', 'V3', 'V4', 'V5', 'V6', 'V7', 'V8', 'V9', 'V10', 'V11', 'V12', 'V13', 'V14', 'V15', 'V16', 'V17', 'V18', 'V19', 'V20', 'V21', 'V22', 'V23', 'V24', 'V25', 'V26', 'V27')
#new_name <- c(1:27)
colnames(data_corr) <- new_name
data_corr$V27 <- as.numeric(data_corr$V27)
cor_mat <- cor(data_corr[,c(3:25, 27)])
ggcorr(data_corr[,c(13:25, 27)])
```
```{r}
names(data[c(14, 15, 16, 23, 25)])
```

Наиболее важны признаки состояния: V14, V15, V16, V23, V25
[14] "Оценка.социальной.поддержки"                                     
[15] "Ожидаемая.продолжительность.здоровой.жизни"                      
[16] "Свобода.граждан.самостоятельно.принимать.жизненно.важные.решения"
[23] "Индекс.продовольственной.безопасности"                           
[25] "Чувство.неравенства.доходов.в.обществе"  

### Визуализация зависимостей между признаками состояния и интегральной оценкой счастья
```{r}
most_import <- c('Оценка.социальной.поддержки', 'Оценка.риска.безработицы', 'Оценка.риска.безработицы', 'Индекс.семьи')
ggplot(data = train_data, aes(x = Оценка.социальной.поддержки, group = Ощущаемое.счастье, fill = Ощущаемое.счастье)) + geom_density(alpha = 0.5)
ggplot(data = train_data, aes(x = Ожидаемая.продолжительность.здоровой.жизни, group = Ощущаемое.счастье, fill = Ощущаемое.счастье)) + geom_density(alpha = 0.5)
ggplot(data = train_data, aes(x = Издержки.сообщества.на.окружающую.среду.млн., group = Ощущаемое.счастье, fill = Ощущаемое.счастье)) + geom_density(alpha = 0.5)
ggplot(data = train_data, aes(x = Индекс.продовольственной.безопасности, group = Ощущаемое.счастье, fill = Ощущаемое.счастье)) + geom_density(alpha = 0.5)
ggplot(data = train_data, aes(x = Чувство.неравенства.доходов.в.обществе, group = Ощущаемое.счастье, fill = Ощущаемое.счастье)) + geom_density(alpha = 0.5)
```

```{r}
cor_mat <- as.data.frame(cor_mat)
```

### Зависимости между основными признаками состояния и признаками причины
``` {r}
ggcorr(data_corr[,c(3:12, 14, 15, 16, 23, 25)], label = TRUE)
```

```{r}
ggplot(data = train_data, aes(x = Оценка.социальной.поддержки, y = Волатильность.потребительских.цен.в.сообществе)) + 
  geom_point(aes(color = Ощущаемое.счастье))
ggplot(data = train_data, aes(x = Ожидаемая.продолжительность.здоровой.жизни, y = Количество.членов.семьи)) +
  geom_point(aes(color = Ощущаемое.счастье)) 
ggplot(data = train_data, aes(x = Издержки.сообщества.на.окружающую.среду.млн., y = Охват.беспроводной.связи.в.сообществе)) + 
  geom_point(aes(color = Ощущаемое.счастье)) 
ggplot(data = train_data, aes(x = Индекс.продовольственной.безопасности, y = Количество.членов.семьи)) + 
  geom_point(aes(color = Ощущаемое.счастье))
ggplot(data = train_data, aes(x = Чувство.неравенства.доходов.в.обществе, y = Издержки.сообщества.на.окружающую.среду.млн.)) + 
  geom_point(aes(color = Ощущаемое.счастье))
```

```{r}
Data <- learn_data
categor <- c("Оценка.социальной.поддержки", "Ожидаемая.продолжительность.здоровой.жизни", "Свобода.граждан.самостоятельно.принимать.жизненно.важные.решения", "Индекс.продовольственной.безопасности", "Чувство.неравенства.доходов.в.обществе")
nums_categor <- c(14, 15, 16, 23, 25)

datas_cat <- list()
k <- 1
for (i in c(14, 15, 16, 23, 25)) {
  datas_cat[[k]] <- cbind(Data[,3:12], Data[,i])
  names(datas_cat[[k]])[11] <-  categor[k]
  k <- k + 1
}
```

```{r}
formuls <- list()
LM_full <- lm("Оценка.социальной.поддержки ~.", data=datas_cat[[1]])
summary(LM_full)
#Оставляем только важные для модели факторы
formula <- "Оценка.социальной.поддержки ~ 
        Количество.членов.семьи+
        Количество.лет.образования+
        Коэффициент.Джини.сообщества+
        Охват.беспроводной.связи.в.сообществе
        "
LM <- lm(formula, data=datas_cat[[1]])
summary(LM)
formuls[[1]] <- formula #Запоминаем формулу

#############################################

LM_full <- lm("Ожидаемая.продолжительность.здоровой.жизни~.", data=datas_cat[[2]])
summary(LM_full)
#Оставляем только важные для модели факторы
formula <- "Ожидаемая.продолжительность.здоровой.жизни ~ 
        Объем.потребленного.алкоголя.в.год.л. +
        Количество.членов.семьи +
        Издержки.сообщества.на.окружающую.среду.млн."
LM <- lm(formula, data=datas_cat[[2]])
summary(LM)
formuls[[2]] <- formula #Запоминаем формулу

#############################################

LM_full <- lm("Свобода.граждан.самостоятельно.принимать.жизненно.важные.решения~.", data=datas_cat[[3]])
summary(LM_full)
#Оставляем только важные для модели факторы
formula <- "Свобода.граждан.самостоятельно.принимать.жизненно.важные.решения ~
        Среднегодовой.доход.тыс  + 
        Коэффициент.Джини.сообщества + 
        Охват.беспроводной.связи.в.сообществе  + 
        Количество.смертей.от.вирусных.и.респираторных.заболеваний.в.сообществе.тыс..человек +
        Волатильность.потребительских.цен.в.сообществе"
LM <- lm(formula, data=datas_cat[[3]])
summary(LM)
formuls[[3]] <- formula #Запоминаем формулу

#############################################

LM_full <- lm("Индекс.продовольственной.безопасности ~.", data=datas_cat[[4]])
summary(LM_full)
#Оставляем только важные для модели факторы
formula <- "Индекс.продовольственной.безопасности ~
        Объем.потребленного.алкоголя.в.год.л. + 
        Количество.членов.семьи +
        Издержки.сообщества.на.окружающую.среду.млн. +
        Волатильность.потребительских.цен.в.сообществе"
LM <- lm(formula, data=datas_cat[[4]])
summary(LM)
formuls[[4]] <- formula #Запоминаем формулу

#############################################

LM_full <- lm("Чувство.неравенства.доходов.в.обществе ~.", data=datas_cat[[5]])
summary(LM_full)
#Оставляем только важные для модели факторы
formula <- "Чувство.неравенства.доходов.в.обществе ~
        Среднегодовой.доход.тыс + 
        Объем.потребленного.алкоголя.в.год.л. +
        Издержки.сообщества.на.окружающую.среду.млн. +
        Охват.беспроводной.связи.в.сообществе"
LM <- lm(formula, data=datas_cat[[5]])
summary(LM)
formuls[[5]] <- formula #Запоминаем формулу
```

```{r}
#Подготавливаем таблицу для прогнозирования
ForecastData <- learn_data
ForecastData <- ForecastData[-13:-25]

#По найденным ранее формулам выполняем прогноз 
for (i in 1:5) {
  lin_mod <- lm(formuls[[i]], data=datas_cat[[i]])
  future <- predict(object=lin_mod, newdata=ForecastData)
  ForecastData[, categor[i]] <- future
}
```

```{r}
# Логистические модели и матрица для логистических вероятностей
Veroyatn <- matrix(nrow=30000, ncol = 10)
for (i in 1:10){
  logistic <- glm(Уровень.счастья == i ~ Оценка.социальной.поддержки + 
                    Ожидаемая.продолжительность.здоровой.жизни + 
                    Свобода.граждан.самостоятельно.принимать.жизненно.важные.решения +
                    Индекс.продовольственной.безопасности +
                    Чувство.неравенства.доходов.в.обществе, 
                    data=test_data, family='binomial')
  Veroyatn[,i] <- logistic$fitted.values
}

#Проверка точности предсказания на существующих данных

flag <- 0
test <- numeric(30000)
for(i in 1:30000){
  
  test[i] <- which.max(Veroyatn[i,])
  if (is.na(test_data$Уровень.счастья[i])) {
    next
  }
  if(test[i] == test_data$Уровень.счастья[i]){
    flag = flag + 1
  }
}
tochn <- flag/30000
print(tochn)
```

```{r}
Future <- matrix(nrow = 6000, ncol = 10)
for (i in 1:10){
  logistic <- glm(Уровень.счастья == i ~ Оценка.социальной.поддержки +
                    Ожидаемая.продолжительность.здоровой.жизни +
                    Свобода.граждан.самостоятельно.принимать.жизненно.важные.решения +
                    Индекс.продовольственной.безопасности +
                    Чувство.неравенства.доходов.в.обществе,
                  data=no_data, family='binomial')
  Future[,i] <- predict(object = logistic, newdata = no_data, type='response')
}


pred <- numeric(6000)
for(i in 1:6000){
  pred[i] <- which.max(Future[i,])
}

nameHappy <- factor(pred, levels = c(1,2,3,4,5,6,7,8,9,10),
                    labels=c("Hopeless","Depressed","Suffering",
                             "Strugglng","Coping","Just ok",
                             "Doing well", "Blooming", "Thriving",
                             "Prospering"))


ForecastData$Ощущаемое.счастье <- nameHappy

write.csv(ForecastData, 'res_49.csv')
```

